package classes.Windows;

import javax.swing.*;
import java.awt.*;

/**
 * @Auther: 程嘉明
 * @Date: 2018/8/20/020 21:03
 * @Type：顶层类，不负责具体的项目工程，设置项目窗口特有属性
 * @Description:这个类继承了JFrame使其是一个窗口，经过设置出现满足项目的窗体 区别与JFrame为：
 * 1.确认窗口居中
 * 2.窗体风格为扁平风格
 * 3.布局为绝对布局
 * 4.窗体关闭方式为只关闭当前窗口程序不结束
 * 5.默认可视
 * 6.设置图标为项目的图标
 * 7.不可拉伸
 * 8.设置背景图片
 * 9将背景窗口容器作为Window类的的主容器，开放此容器的添加接口，所有的控件只能添加到主容器中方法为addP()
 */
public class Window extends JFrame {
    /**
     * 在构造器中完成对部分选项的设定
     * 使用参数列表
     */
    private JPanel imagePanel;//背景图片容器

    public Window(int length, int width, String title) throws Exception {
        UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");//扁平风格
        this.setTitle(title);//设置标题
        this.setSize(length, width);//设置大小
        imagePanel = new ImageComponent(length, width);
        this.add(imagePanel);
        this.centralScreen();//窗口居中
        this.setResizable(false);//不可拉伸
        ImageIcon icon = new ImageIcon("./src/picture/project.png");//设置图标路径
        this.setIconImage(icon.getImage());//设置图标
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//设置窗体关闭方式为只关闭当前窗口程序不结束
        this.setVisible(true);//默认可视
        this.setLayout(null);//绝对布局
    }

    /**
     * 向外暴露的添加方法直接将控件加入到背景图片的容器中
     * @param comp
     */
    public void addP(Component comp){
        this.imagePanel.add(comp);
        this.imagePanel.repaint();
    }
    public static void main(String[] args) throws Exception {
//        Window win = new Window(800, 600, "Text");
//        JButton jb = new JButton("测试按钮");
//        jb.setBounds(160, 160, 60, 60);
//        jb.setVisible(true);
//        win.addP(jb);
    }

    /**
     * 设置窗体是否出现在屏幕中央
     * 设置为私有仅仅为本类使用，防止被继承更改
     */
    private void centralScreen() {
        int windowWidth = this.getWidth();                     //获得窗口宽
        int windowHeight = this.getHeight();                   //获得窗口高
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();//获取屏幕的尺寸
        int screenWidth = screenSize.width;                     //获取屏幕的宽
        int screenHeight = screenSize.height;                   //获取屏幕的高
        this.setLocation(screenWidth / 2 - windowWidth / 2, screenHeight / 2 - windowHeight / 2);//设置窗口居中显示
    }

}

class ImageComponent extends JPanel {
    private Image image;//图片
    //获取窗体的长宽
    private int length;
    private int width;

    public ImageComponent(int length, int width) {
        this.setLayout(null);//绝对布局
        this.length = length;
        this.width = width;
        this.image = new ImageIcon("./src/picture/startbgp.jpeg").getImage();
        this.setVisible(true);
        this.setOpaque(true);
    }

    @Override
    public void paintComponent(Graphics g) {
        if (image == null) {
            System.out.println("image为空");
        }
        g.drawImage(image, 0, 0, length, width, null);//绘画
    }

}